Una primera visita a las series de Fourier

Javier Pérez González
Departamento de Análisis Matemático
Universidad de Granada

Inicialización

Off[General::spell1];

SetOptions[Plot, 
        Background -> RGBColor[1, 1, 0.75]];

Aproximación por polinomios trigonométricos

Un polinomio trigonométrico de orden n es una función de la forma   T(x)=(Subscript[a, 0]) + 
                (∑_(k = 1)^n)(
                    (Subscript[a, k]) cos(k x)  +  (Subscript[b, k]) sen(k x)) donde (Subscript[a, 0]),  (Subscript[a, k]),  (Subscript[b, k]) son números reales llamados coeficientes del polinomio. Aquí tienes algunos ejemplos de polinomios trigonométricos y sus gráficas.

Plot[2 - Sin[2  x] + 3  Sin[4  x], {x, -3 π, 3  π}, 
        PlotStyle -> Hue[ .65]];

Plot[
        (1/2) Sin[x] + (2/5) Cos[2  x] - 
          (3/10) Sin[3  x] - (1/5) Cos[4  x] + 
          (1/10) Sin[5  x], {x, -3 π, 3  π}, 
        PlotStyle -> Hue[ .65], PlotRange -> All];

Plot[
        Sin[x] - 
          Cos[x] + (1/2) Sin[2  x] - (1/2) Cos[2  x] + (1/3) 
            Sin[3  x] - (1/3) Cos[3  x], {x, -3 π, 3  π}, 
        PlotStyle -> Hue[ .65]];

Plot[
        2 Sin[x] - 
          Sin[2 x] + ((2 )/3) Sin[3 x] - (1/2) 
            Sin[4 x] + ((2 )/5) 
            Sin[5 x] - (1/(3 )) Sin[6 x], {x, -3 π, 
          3  π}, PlotStyle -> Hue[ .65]];

Plot[
        2 Sin[x] + ((2 )/(3 )) 
            Sin[3  x] + ((2 )/(5 )) 
            Sin[5  x], {x, -3 π, 3  π}, 
        PlotStyle -> Hue[ .65]];

Como acabas de ver, los polinomios trigonométricos pueden tener gráficas con muy distintos aspectos. Parece razonable conjeturar que, eligiendo los coeficientes de forma adecuada, podremos conseguir una buena aproximación de una función dada por medio de polinomios trigonométricos. 
Recuerda que ya sabes cómo aproximar localmente funciones derivables por sus polinomios de Taylor. El problema que nos planteamos ahora es parecido: se trata de calcular el polinomio trigonométrico de orden n que "aproxima mejor" a una función dada  f. 
Se impone precisar el tipo de aproximación que vamos a considerar. Teniendo en cuenta que los polinomios trigonométricos tienen período 2π, trataremos de aproximar la función  f  en el intervalo [-π, π ]. Supondremos solamente que f es continua en dicho intervalo. Como puedes apreciar, a diferencia de los polinomio de Taylor que permiten una aproximación local para una función que tenga n derivadas, ahora queremos una aproximación global, válida en todo un intervalo, para funciones continuas. 
Todavía queda por aclarar lo más importante: ¿de qué manera vamos a medir la aproximación entre la función  f  y un polinomio trigonométrico T ?  Pues bien, vamos a considerar la aproximación en media cuadrática. Esto quiere decir que entre todos los polinomios trigonométricos, T, de orden n vamos a calcular aquél que haga mínima la cantidad \(\(\ \)\(\(1\/π\) \(∫\_\(-π\)\%π\(\((f(x) - 
                        T(x))\)\^2\) dx\)\)\). Dicho polinomio se llama polinomio de Fourier de orden n de la función  f.
Pongamos  T(x)=(∑_(k = 0)^n)((Subscript[a, k]) cos(k x)  +  
                      (Subscript[b, k]) sen(k x))=(Subscript[a, 0]) + (∑_(k = 1)^n)((Subscript[a, k]) cos(
                            k x)  +  (Subscript[b, k]) sen(k x)) y calculemos los coeficientes de T forma que  (1/π) (∫_(-π)^π)(((f(x) - 
                          T(x)))^2) dx sea mínima. Desarrollando el cuadrado, tenemos que:
 \(\(1\/π\) \(∫\_\(-π\)\%π\(\((f(x) - 
                            T(x))\)\^2\) dx\) = \(\(1\/π\) \(∫\_\(-π\)\%π\(\( f(
                              x)\)\^2\) dx\)\  + \ \(1\/π\) \(∫\_\(-π\)\%π\(\( T(
                              x)\)\^2\) dx\)\  - \ \(2\/π\) \(∫\_\(-π\)\%π\( f(x)\) \(T(
                          x)\) dx\)\  = \(1\/π\) \(∫\_\(-π\)\%π\(\( f(
                              x)\)\^2\) dx\) + ∑\+\(j = 0\)\%n\(∑\+\(k = 0\)\%n\( 
                            a\_j\) \(b\_k\) \(1\/π\) \(∫\_\(-π\)\%π\( cos(j\ x)\) \(sen(
                              k\ x)\) dx\)\) + ∑\+\(j = 0\)\%n\(∑\+\(k = 0\)\%n\( 
                            a\_j\) \(a\_k\) \(1\/π\) \(∫\_\(-π\)\%π\( cos(j\ x)\) \(cos(
                              k\ x)\) dx\)\) + 
\(+\(∑\+\(j = 0\)\%n\(∑\+\(k = 0\)\%n\( 
                              b\_j\) \(b\_k\) \(1\/π\) \(∫\_\(-π\)\%π\( sen(j\ x)\) \(sen(
                                k\ x)\) dx\)\)\)\)\  - \ ∑\+\(k = 0\)\%n\( a\_k\) \(1\/π\) \(∫\_\(-π\)\%π\( 
                            f(x)\) \(cos(
                            k\ x)\) dx\)\  - \ 
\(-\ 
                      2\) \(∑\+\(k = 0\)\%n\( 
                            b\_k\) \(1\/π\) \(∫\_\(-π\)\%π\( f(x)\) \(sen(k\ x)\) dx\)\)\)\)

Teniendo en cuenta, como fácilmente puedes comprobar con Mathematica, que (∫_(-π)^π) 
              cos (jx) sen (kx) dx = 0, \(∫\_\(-π\)\%π\( 
                cos\^2\) \((kx)\) dx = \(∫\_\(-π\)\%π\( sen\^2\) \((kx)\) dx = π\)\)  y, para j ≠ k, \(∫\_\(-π\)\%π 
              cos \((jx)\)\ cos \((kx)\) dx = \(∫\_\(-π\)\%π 
                sen \((jx)\)\ sen \((kx)\) dx = 0\)\). Y poniendo \(TraditionalForm\`α\_k = \(1\/π\) \(∫\_\(-π\)\%π\( f(x)\) \(cos(
                kx)\) dx\), \ β\_k = \(1\/π\) \(∫\_\(-π\)\%π\( f(x)\) \(sen(kx)\) dx\)\), resulta
\(\(1\/π\) \(∫\_\(-π\)\%π\(\((f(x) - 
                          T(x))\)\^2\) dx\) = \(\(1\/π\) \(∫\_\(-π\)\%π\(\( f(x)\)\^2\) dx\)\  + \ 
                2  a\_0\%2 + ∑\+\(k = 1\)\%n a\_k\%2 + ∑\+\(k = 1\)\%n b\_k\%2 - 2 \( a\_0\) α\_0 - 
                2 \(∑\+\(k = 1\)\%n\( a\_k\) α\_k\) - 
                2 \(∑\+\(k = 1\)\%n\( 
                          b\_k\) β\_k\) = 
\(1\/π\) \(∫\_\(-π\)\%π\(\( f(
                            x)\)\^2\) dx\) + \ ∑\+\(k = 1\)\%n\((a\_k - α\_k)\)\^2 + \ ∑\+\(k = 1\)\%n\((b\_k - β\_k)\)\^2\  + 
                2 \((a\_0 - α\_0/2)\)\^2 - \ ∑\+\(k = 0\)\%n α\_k\%\(\(2\)\(\ \)\)\  - \ ∑\+\(k = 1\)\%n β\_k\%\(\(2\)\(\ \)\)\  - \ α\_0\%2/2\)\)

Expresión que, evidentemente, es mínima cuando (Subscript[a, k]) = (Subscript[α, k]) ,  (Subscript[b, k]) = (Subscript[β, k]),  
      1 ≤  k ≤  n, y (Subscript[a, 0]) = (Subscript[α, 0])/2. Por tanto el polinomio de Fourier de orden n de  f  es el polinomio trigonométrico (Subscript[F, n])(f, x)=(Subscript[a, 0]) + (∑_(k = 1)^n)((Subscript[a, k]) cos(k x)  +  
                    (Subscript[b, k]) sen(k x))  cuyos coeficientes, llamados coeficientes de Fourier de f, vienen dados por:
		\(a\_0 = \(1\/\(2  π\)\) \(∫\_\(-π\)\%π\( f(x)\) dx\)\)
 (Subscript[a, k])=(1/π)(∫_(-π)^π)f(x)cos(k x)dx      (1 ≤ k ≤ n)
\(\(\ \)\(b\_k = \(1\/π\) \(∫\_\(-π\)\%π\( f(x)\) \(sen(
                    k\ x)\) dx\ \ \ \ \ \((1 ≤ 
                      k ≤ n)\)\)\)\)
Los (Subscript[a, k]) se llaman coeficientes coseno y los (Subscript[b, k]) se llaman coeficientes seno. Es importante que te des cuenta de que en ningún momento hemos usado la supuesta continuidad de  f  y que lo único necesario  para poder hacer los cálculos anteriores es que las integrales que en ellos aparecen estén definidas, para lo cual es suficiente que la función f sea integrable. En particular, tiene perfecto sentido hablar de los coeficientes de Fourier de una función monótona o de una función acotada con un número finito de discontinuidades.

Cálculo de los coeficientes de Fourier

Para calcular con Mathematica los coeficientes de Fourier de una función  f  podemos, en principio, definir

\(a[f_, var_, n_Integer] := 
      \(a[f, var, n] = 
        1\/π*
          \(∫\_\(-π\)\%π f*Cos[n*var] 
              \[DifferentialD]var\)\); 

    b[f_, var_, n_Integer] := 
      \(b[f, var, n] = 
        1\/π*
          \(∫\_\(-π\)\%π f*Sin[n*var] 
              \[DifferentialD]var\)\); \)

El polinomio de Fourier de orden n de f puedes definirlo ahora como

PoliFourier[f_, var_, n_Integer] := 
      a[f, var, 0]/
          2  +  (∑_(k = 1)^n)(a[f, var, k]*Cos[k*var] + 
              b[f, var, k]*Sin[k*var])

Evalúa la siguiente celda para obtener los primeros diez coeficientes coseno de la función identidad

Table[a[t, t, k], {k, 10}]

Prueba ahora con la función (t^3).

Table[a[(t^3), t, k], {k, 10}]

¿Sabes interpretar estos resultados? ¿Qué pasará si calculas los coeficientes seno de las funciones (t^2) y (t^4)? Prueba a ver qué pasa.

Table[b[(t^2), t, k], {k, 10}]

Table[b[(t^4), t, k], {k, 10}]

Seguro que ya sabes explicar estos resultados. Ha llegado el momento de que calcules polinomios de Fourier. A continuación te propongo algunos. Por comodidad, generamos los polinomios de Fourier en una tabla de forma que podamos usarlos después para representar sus gráficas.

Table[idf[k] = PoliFourier[t, t, k], {k, 6}];

Si quieres, puedes ver alguno de los polinomios obtenidos.

idf[5]

Ahora representamos las gráficas de los seis polinomios y de la función identidad.

Do[Plot[{t, idf[k]}, {t, -π, π}, 
        PlotRange -> {-π -  .5, π +  .5}, 
        PlotStyle -> {Hue[0], Hue[ .7]}, 
        Background -> RGBColor[1, 1, 0.75]], {k, 6}]

Ahora puedes experimentar con distintas funciones. Utiliza funciones polinómicas sencillas como (t^3) o  (t^2) + (t^3). También puedes usar la función exponencial Exp[t], o Exp[-t]Sin[t] e incluso la función Exp[Sin[t]]. La aproximación de esta última es sorprendente. Sé paciente, Mathematica necesita un minuto para hacer los cálculos.

Table[
        expsinf[k] = PoliFourier[Exp[Sin[t]], t, k], {k, 3}];

Puedes ver los polinomios obtenidos y comprobarás que Mathematica ha usado unas funciones, llamadas funciones de Bessel, para calcular de forma simbólica exacta los coeficientes.

expsinf[3]

Si quieres, puedes obtener los polinomios con aproximaciones numéricas de los coeficientes.

expsinf[3] // N

Representemos las aproximaciones obtenidas.

Do[Plot[{Exp[Sin[t]], expsinf[k]}, {t, -π, π}, 
        PlotRange -> {-π -  .5, π +  .5}, 
        PlotStyle -> {Hue[0], Hue[ .7]}, 
        Background -> RGBColor[1, 1, 0.75]], {k, 1, 3}]

Es llamativo cómo el tercer polinomio de Fourier casi coincide con la función en el intervalo [-π, π ]. Hagamos una prueba más todavía con la función valor absoluto que en Mathematica se escribe Abs[t].

Table[
        valorabsf[k] = PoliFourier[Abs[t], t, k], {k, 1, 7, 2}];

Do[Plot[{Abs[t], valorabsf[k]}, {t, -π, π}, 
        PlotRange -> {- .2, π +  .2}, 
        PlotStyle -> {Hue[0], Hue[ .7]}, 
        Background -> RGBColor[1, 1, 0.75], 
        AspectRatio -> Automatic], {k, 1, 7, 2}]

Sorprendente, ¿verdad?.

También puedes obtener los coeficientes de Fourier y los polinomios de Fourier usando comandos propios de Mathematica: "FourierCosCoefficient[expr, t, n]","FourierSinCoefficient[expr, t, n]", "FourierTrigSeries[expr, t, k]". Para ello, antes que nada, hay que cargar dichos comandos lo que puedes hacer evaluando la siguiente celda.

<< Calculus`FourierTransform`

Ahora puedes pedirle a Mathematica que te informe de lo que hacen los comandos anteriores.

Information[FourierCosCoefficient, LongForm -> False]

Information[FourierTrigSeries, LongForm -> False]

Para ajustar estos comandos al intervalo [-π, π] hay que modificar los parámetros por defecto.

FourierTrigSeries[(t^2) + (t^3), t, 10, 
      FourierParameters -> {-1, 1/(2  π)}]

Comprueba que si haces el cálculo con el comando "PoliFourier" antes definido obtienes el mismo resultado.

PoliFourier[(t^2) + (t^3), t, 10]

Los polinomios de Fourier son particularmente apropiados para representar ondas y aproximar funciones oscilatorias o periódicas. Una manera cómoda de representar estas funciones con Mathematica es usando la función de Heaviside "UnitStep[x]" que es igual a 1 si x ≥ 0 e igual a 0 para x < 0. Aquí puedes ver unos ejemplos. Procura entenderlos.

\(graf1 = 
      Plot[UnitStep[\((x - π/2)\) x \((x + π/2)\)], {x, \(-π\), 
          π}, PlotStyle -> Hue[ .65], 
        Background -> RGBColor[1, 1, 0.75], 
        PlotRange -> {\(- .2\), 1.2}, AxesOrigin -> {0, \(- .1\)}, 
        DisplayFunction -> Identity]; 


    graf2 = Plot[
        \((Pi^2/4 - \((x + π/2)\)^2)\)*UnitStep[\(-\((x + π)\)\) x] + 
          \((Pi^2/4 - \((x - π/2)\)^2)\)*
            UnitStep[\(-\((x - π)\)\) x], {x, \(-π\), π}, 
        PlotStyle -> Hue[ .65], PlotRange -> {\(- .1\), 2.7}, 
        Background -> RGBColor[1, 1, 0.75], 
        DisplayFunction -> Identity]; 

    Show[GraphicsArray[{graf1, graf2}], ImageSize -> {544, 159}]; 

    Clear[graf1, graf2]; \)

Observa que en la gráfica de la izquierda Mathematica une mediante un segmento vertical los puntos de salto de la función. Observa que se trata de dos funciones periódicas con período π. Evalúa la siguiente celda para ver las aproximaciones de dichas funciones por sus polinomios de Fourier. Ten paciencia, tarda un minuto, casi una eternidad cuando estás delante de la pantalla de un ordenador.

\(Clear[f, g]; 

    f[x_] := UnitStep[\((x - π/2)\) x \((x + π/2)\)]; 

    g[x_] := \((Pi^2/4 - \((x + π/2)\)^2)\)*
          UnitStep[\(-\((x + π)\)\) x] + 
        \((Pi^2/4 - \((x - π/2)\)^2)\)*UnitStep[\(-\((x - π)\)\) x]; 
    
Table[polif[k] = PoliFourier[f[x], x, 3  k], {k, 2, 5}]; 

    Table[polig[k] = PoliFourier[g[x], x, k], {k, 2, 5}]; 

    Table[graf1[k] = 
        Plot[{f[x], polif[k]}, {x, \(-π\), π}, 
          PlotRange -> {\(- .2\), 1.2}, 
          AxesOrigin -> {0, \(- .1\)}, 
          PlotStyle -> {Hue[ .65], Hue[0]}, 
          Background -> RGBColor[1, 1, 0.75], 
          DisplayFunction -> Identity], {k, 2, 5}]; 

    Table[graf2[k] = 
        Plot[{g[x], polig[k]}, {x, \(-π\), π}, 
          PlotStyle -> {Hue[ .65], Hue[0]}, 
          PlotRange -> {\(- .1\), 2.7}, 
          Background -> RGBColor[1, 1, 0.75], 
          DisplayFunction -> Identity], {k, 2, 5}]; 

    Do[Show[GraphicsArray[{graf1[k], graf2[k]}], 
        ImageSize -> {544, 159}], {k, 2, 5}]; \)

Series de Fourier

Al igual que los polinomios de Taylor conducen a las series de Taylor, los polinomios de Fourier conducen de manera natural a las series de Fourier. La serie de Fourier de una función integrable  f  es la sucesión de sus polinomios de Fourier, es decir, es la serie de funciones  (Subscript[a, 0]) + 
            (∑_(k ⩾ 1))(
                (Subscript[a, k]) cos(k x)  +  (Subscript[b, k]) sen(k x)) donde los coeficientes viene dados por
				(Subscript[a, 0])=(1/(2 π))(∫_(-π)^π)f(x)dx
 (Subscript[a, k])=(1/π)(∫_(-π)^π)f(x)cos(k x)dx     (k ≥ 1)   
 (Subscript[b, k])=(1/π) 
                  (∫_(-π)^π) 
                    f(x) sen(k x) 
                      dx        (
                          k ≥ 1)

Lo sorprendente es que, mientras las series de Taylor sólo sirven para representar localmente a las funciones analíticas, es posible "representar" de forma "global" funciones mucho más generales por series de Fourier. La cuestión está en precisar qué se entiende por "representar". Fíjate que con las series de Taylor esta cuestión ni siquiera se plantea porque la convergencia de dichas series es siempre uniforme en intervalos cerrados y acotados contenidos en su intervalo de convergencia y, por ello, las series de Taylor proporcionan una representación "óptima". Es justamente la posibilidad de representar globalmente funciones por medio de series de Fourier con tipos de convergencia más débiles que la uniforme lo que hace de dichas series una herramienta muy general y de gran utilidad para tratar una gran variedad de problemas.
El estudio de los distintos tipos de convergencia de las series de Fourier no es propio de un curso de Cálculo y requiere como herramienta básica la integral de Lebesgue. Lo que sí debes saber es que no hay garantía de que la serie de Fourier de una función integrable, continua incluso, converja puntualmente a dicha función. Se necesita imponer algunas condiciones a una función para que su serie de Fourier converja puntualmente a ella. El siguiente resultado es de los más útiles en este sentido.

Teorema. Sea f una función continua en [-π, π]. Supongamos que f(-π) = f(π) y que hay una partición del intervalo [-π, π], (Subscript[t, 0]) = -π < (Subscript[t, 1]) < (Subscript[t, 2]) <  ...  < 
            (Subscript[t, n - 1]) < (Subscript[t, n]) = π, tal que f tiene derivada continua en cada intervalo [(Subscript[t, k - 1]), (Subscript[t, k])] de dicha partición. Entonces se verifica que la serie de Fourier de  f converge uniformemente a  f en el intervalo [-π, π].

Calculemos la serie de Fourier de la función f (x) = (x^2). Como es una función par sabemos que los coeficientes seno son nulos. Como queremos calcular simbólicamente los coeficientes a[f,var,n], b[f,var,n] sin atribuir ningún valor al entero n hay que modificar las definiciones dadas al principio. También es necesario sustituir cos(n π) por (((-1))^n) y sen(n π) por 0. En algunos casos deberás ayudar a Mathematica para sustituir 1 + (((-1))^n)por 2 o por 0 según proceda.

\(sustitucion = {Cos[n*π] :> \((\(-1\))\)\^n, 
        Sin[n*π] :> 0}; 
a[x\^2, x, 0]/2\)a[(x^2), x, n] = 
      Integrate[(1/π) (x^2) Cos[n*x], {x, -π, π},  
          Assumptions -> n ∈ Integers  &&  n > 0 ] /. 
        sustitucion

En virtud del teorema anterior, obtenemos que   (x^2) = ((π^2)/3) + (∑_(n = 1)^∞)(( 
                        4 (((-1))^n))/(n^2)) cos(n x)  para todo x ∈ [-π, π]  y la convergencia es uniforme en dicho intervalo. En particular, haciendo x = 0, se deduce que \(∑\+\(n = 1\)\%∞\((\(-1\))\)\^\(n + 1\)\/n\^2 = π\^2\/12\).

Ejercicio. Obtener las series de Fourier de las funciones |x| , |sen x|, y ((x^2)/2 - π x) 
          UnitStep[x (π - x)] + ((x^2)/2 + π x) 
          UnitStep[-x (π + x)]. Deducir el valor de los límites (∑_(n = 1)^∞) (1/(((2  n - 1))^2)), (∑_(n = 1)^∞) (1/(4  (n^2) - 1)) y  (∑_(n = 1)^∞) (1/(n^2)).